What is object-hash?
The object-hash npm package provides a function to generate a hash from a JavaScript object using various algorithms. It is useful for creating unique identifiers for objects, comparing objects by their hash, and caching objects based on their content.
What are object-hash's main functionalities?
Generate hash from an object
This feature allows you to generate a hash string from a JavaScript object. The hash is determined by the object's content.
const hash = require('object-hash');
const myObject = { name: 'Alice', age: 25 };
const objectHash = hash(myObject);
Generate hash with different algorithms
This feature allows you to specify different hashing algorithms, such as 'md5', 'sha1', 'sha256', etc., to generate the hash.
const hash = require('object-hash');
const options = { algorithm: 'sha256' };
const objectHash = hash({ name: 'Alice', age: 25 }, options);
Exclude properties from hashing
This feature allows you to exclude the values of the properties from the hash, effectively hashing the structure (keys) of the object only.
const hash = require('object-hash');
const options = { excludeValues: true };
const objectHash = hash({ name: 'Alice', age: 25 }, options);
Respect object types
This feature allows you to ignore the type of the object when generating the hash, treating arrays and objects with the same content as equal.
const hash = require('object-hash');
const options = { respectType: false };
const objectHash = hash([1, 2, 3], options);
Other packages similar to object-hash
hash-object
hash-object is an npm package that also generates hashes from JavaScript objects. It is similar to object-hash but may have different options and hashing capabilities.
json-hash
json-hash is another npm package that hashes JSON objects. It differs from object-hash in the way it processes and generates the hash, potentially leading to different hash values for the same object.
deep-hash
deep-hash provides functionality to hash nested objects. While similar to object-hash, it may have different features or performance characteristics when dealing with deeply nested structures.
Object-Hash
Generate hashes from objects and values in node and the browser. Uses node.js
crypo module for hashing. Supports sha1, md5 and many others (depending on the platform).
- Hash values of any type.
- Provides a hash table implementation.
- Supports a keys only option for grouping like objects with different values.
var hash = require('object-hash');
hash(value, options);
Generate a hash from any object or type. Defaults to sha1 with hex encoding.
algorithm
hash algo to be used: 'sha1', 'md5'. default: sha1excludeValues
{true|false} hash object keys, values ignored. default: falseencoding
hash encoding, supports 'buffer', 'hex', 'binary', 'base64'. default: hex
hash.sha1(value);
Hash using the sha1 algorithm.
Sugar method, equivalent to hash(value, {algorithm: 'sha1'})
hash.keys(value);
Hash object keys using the sha1 algorithm, values ignored.
Sugar method, equivalent to hash(value, {excludeValues: true})
hash.MD5(value);
Hash using the md5 algorithm.
Sugar method, equivalent to hash(value, {algorithm: 'md5'})
hash.keysMD5(value);
Hash object keys using the md5 algorithm, values ignored.
Sugar method, equivalent to hash(value, {algorithm: 'md5', excludeValues: true})
var hashTable = new hash.HashTable(options);
Create a new HashTable instance. Hashing options are supported and applied to all values
added to the table.
hashTable.add(value1, value2, ...);
Add an object to the hash table. Supports n parameters or an array of values to be
added to the table.
Note: if you wish to evaluate an array as a single table entry
you must wrap it first {[1,2,3,4]}
otherwise each element will be added to the
table separately.
hashTable.getValue(hashKey);
Retrive the objects value from the table by hash key. If there is no matching entry
returns undefined.
hashTable.getCount(hashKey);
Retrieve a counter representing the number of times an object was added to
the table. Returns 0 if a matching key is not found.
hashTable.hasKey(hashKey);
Returns true if the specified hash is in the hash table otherwise false.
hashTable.toArray();
Returns an array of the hash table contents in the following format:
[ {hash:'14fa461bf4b98155e82adc86532938553b4d33a9',
count: 2, value: {foo: 'bar', baz: true }},
{hash:'14fa461bf4b98155e82adc86532938553b4d33a9',
count: 1, value: {foo: 'bar', baz: true }} ]
Note: when the excludeValues option is set, the value
of the hash table is an array of objects with matching keys.
hashTable.reset();
Clears the contents of the hash table.
Installation
node:
npm install object-hash
browser: /dist/object_hash.js
<script src="object_hash.js" type="text/javascript"></script>
Example usage
var hash = require('object-hash');
var peter = {name: 'Peter', stapler: false, friends: ['Joanna', 'Michael', 'Samir'] };
var michael = {name: 'Michael', stapler: false, friends: ['Peter', 'Samir'] };
var bob = {name: 'Bob', stapler: true, friends: [] };
hash(peter);
hash(michael);
hash(bob);
hash(peter, { excludeValues: true });
hash(michael, { excludeValues: true });
hash.keys(bob);
hash(peter, { algorithm: 'md5', encoding: 'base64' });
hash(michael, { algorithm: 'md5', encoding: 'base64' });
hash(bob, { algorithm: 'md5', encoding: 'base64' });
var hashTable = new hash.HashTable();
var peterHash = hash(peter);
hashTable.add(peter, michael, bob);
hashTable.getValue(peterHash);
hashTable.getCount(peterHash);
hashTable.add({name: 'Peter', stapler: false, friends: ['Joanna', 'Michael', 'Samir'] });
hashTable.getCount(peterHash);
hashTable.hasKey(peterHash);
hashTable.toArray();
Legacy Browser Support
IE <= 8 and Opera <= 11 support dropped in version 0.3.0. If you require
legacy browser support you must either use an ES5 shim or use version 0.2.5
of this module.
Development
git clone https://github.com/puleos/object-hash
gulp tasks
gulp watch
(default) watch files, test and lint on change/addgulp test
unit testsgulp lint
jshintgulp dist
create browser version in /dist
License
MIT